home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / glibc108.gz / glibc108 / glibc-1.08.1 / hurd / msgportdemux.c < prev    next >
C/C++ Source or Header  |  1994-04-26  |  2KB  |  62 lines

  1. /* Demux messages sent on the signal port.
  2.  
  3. Copyright (C) 1991, 1992, 1994 Free Software Foundation, Inc.
  4. This file is part of the GNU C Library.
  5.  
  6. The GNU C Library is free software; you can redistribute it and/or
  7. modify it under the terms of the GNU Library General Public License as
  8. published by the Free Software Foundation; either version 2 of the
  9. License, or (at your option) any later version.
  10.  
  11. The GNU C Library is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14. Library General Public License for more details.
  15.  
  16. You should have received a copy of the GNU Library General Public
  17. License along with the GNU C Library; see the file COPYING.LIB.  If
  18. not, write to the Free Software Foundation, Inc., 675 Mass Ave,
  19. Cambridge, MA 02139, USA.  */
  20.  
  21. #include <hurd.h>
  22. #include <hurd/signal.h>
  23. #include <stddef.h>
  24.  
  25. struct demux
  26.   {
  27.     struct demux *next;
  28.     boolean_t (*demux) (mach_msg_header_t *inp,
  29.             mach_msg_header_t *outp);
  30.   };
  31.  
  32. struct demux *_hurd_msgport_demuxers = NULL;
  33.  
  34. extern boolean_t __msg_server (mach_msg_header_t *inp,
  35.                    mach_msg_header_t *outp);
  36.  
  37. static boolean_t
  38. msgport_server (mach_msg_header_t *inp,
  39.         mach_msg_header_t *outp)
  40. {
  41.   extern boolean_t _S_msg_server (mach_msg_header_t *inp,
  42.                   mach_msg_header_t *outp);
  43.   extern boolean_t _S_exc_server (mach_msg_header_t *inp,
  44.                   mach_msg_header_t *outp);
  45.   struct demux *d;
  46.  
  47.   for (d = _hurd_msgport_demuxers; d != NULL; d = d->next)
  48.     if ((*d->demux) (inp, outp))
  49.       return 1;
  50.  
  51.   return (_S_exc_server (inp, outp) ||
  52.       _S_msg_server (inp, outp));
  53. }
  54.  
  55. /* This is the code that the signal thread runs.  */
  56. void
  57. _hurd_msgport_receive (void)
  58. {
  59.   while (1)
  60.     (void) __mach_msg_server (msgport_server, __vm_page_size, _hurd_msgport);
  61. }
  62.